import random
import pandas as pd

# 模拟数据模板
tower_templates = [
    "{action}到{altitude}英尺",          # 塔台指令
    "转弯至{heading}度",                # 塔台指令
    "保持{altitude}英尺",               # 塔台指令
    "航向改为{heading}度",              # 塔台指令
    "爬升至{altitude}英尺",             # 塔台指令
    "降落至{altitude}英尺",             # 塔台指令
    "保持航向{heading}度",              # 塔台指令
    "保持当前高度{altitude}英尺",       # 塔台指令
    "向左转{angle}度",                 # 塔台指令
    "向右转{angle}度",                 # 塔台指令
    "向右偏航{heading}度",              # 塔台指令
    "向左偏航{heading}度",              # 塔台指令
    "爬升至{altitude}英尺，准备交接",    # 塔台指令
    "降落至{altitude}英尺，准备着陆",    # 塔台指令
    "绕行{heading}度",                 # 塔台指令
    "调整航向至{heading}度",            # 塔台指令
    "改变航向至{heading}度",            # 塔台指令
    "爬升至{altitude}英尺，保持航向{heading}度",  # 塔台指令
    "降落至{altitude}英尺，保持航向{heading}度",  # 塔台指令
    "飞行至{altitude}英尺，继续向{heading}度",    # 塔台指令
    "调头至{heading}度",               # 塔台指令
    "偏航至{heading}度",               # 塔台指令
    "进入{altitude}英尺，准备着陆",      # 塔台指令
    "回航至{altitude}英尺",            # 塔台指令
    "保持目前航向{heading}度",          # 塔台指令
    "航向修正为{heading}度",            # 塔台指令
    "开始降落，目标{altitude}英尺",      # 塔台指令
    "正在爬升至{altitude}英尺",         # 塔台指令
    "降落至{altitude}英尺，准备停车",    # 塔台指令
    "加速至{speed}节",                 # 塔台指令
    "减速至{speed}节",                 # 塔台指令
    "减速至{speed}节，保持航向{heading}度",  # 塔台指令
    "调整航向至{heading}度，保持速度",   # 塔台指令
    "维持当前速度{speed}节",           # 塔台指令
    "飞行至{altitude}英尺，继续前进",    # 塔台指令
    "转至{heading}度，进入航道",        # 塔台指令
    "起飞，目标{altitude}英尺",         # 塔台指令
    "飞行至{altitude}英尺，保持速度{speed}节",  # 塔台指令
    "转弯至{heading}度，继续爬升",      # 塔台指令
    "爬升至{altitude}英尺，准备与其他航班交汇",  # 塔台指令
    "减少航速至{speed}节",             # 塔台指令
    "继续降落至{altitude}英尺",         # 塔台指令
    "飞行至{altitude}英尺，准备交接",    # 塔台指令
    "开始爬升至{altitude}英尺，保持当前航向",  # 塔台指令
    "保持航向{heading}度，开始准备起飞",  # 塔台指令
    "飞行至{altitude}英尺，继续巡航",    # 塔台指令
    "按照航向{heading}度飞行，调整高度",  # 塔台指令
    "爬升至{altitude}英尺，保持速度{speed}节",  # 塔台指令
    "降落至{altitude}英尺，准备拐弯",    # 塔台指令
    "飞行至{altitude}英尺，准备调整航向",  # 塔台指令
    "开始着陆，准备降落至{altitude}英尺",  # 塔台指令
    "调节航向至{heading}度，准备交接"    # 塔台指令
]

pilot_templates = [
    "收到，{action}到{altitude}英尺",      # 飞行员回应
    "航向{heading}度，明白",             # 飞行员回应
    "已按照指示，保持{altitude}英尺",    # 飞行员回应
    "已爬升至{altitude}英尺",           # 飞行员回应
    "航向{heading}度，收到",            # 飞行员回应
    "已经降落至{altitude}英尺",         # 飞行员回应
    "明白，保持航向{heading}度",        # 飞行员回应
    "已经开始爬升至{altitude}英尺",     # 飞行员回应
    "航向{heading}度，正在执行",        # 飞行员回应
    "已按照塔台指令调整航向至{heading}度",  # 飞行员回应
    "收到指令，正在转弯至{heading}度",   # 飞行员回应
    "已达到{altitude}英尺，保持高度",    # 飞行员回应
    "正在爬升至{altitude}英尺",         # 飞行员回应
    "已经降落至{altitude}英尺，等待进一步指示",  # 飞行员回应
    "航向{heading}度，已完成调整",      # 飞行员回应
    "航向{heading}度，已经修正",        # 飞行员回应
    "已飞行至{altitude}英尺，保持航向{heading}度",  # 飞行员回应
    "正在减速至{speed}节",             # 飞行员回应
    "航向{heading}度，继续执行",        # 飞行员回应
    "飞行至{altitude}英尺，已收到指令",  # 飞行员回应
    "保持航向{heading}度，已爬升至{altitude}英尺",  # 飞行员回应
    "收到指令，正在降落至{altitude}英尺",  # 飞行员回应
    "已根据指令调整航向至{heading}度，继续爬升",  # 飞行员回应
    "已调整航向至{heading}度，继续前进",  # 飞行员回应
    "已开始降落至{altitude}英尺，准备着陆",  # 飞行员回应
    "飞行至{altitude}英尺，已经进入航道",  # 飞行员回应
    "航向{heading}度，已完成转弯",       # 飞行员回应
    "已确认，保持航向{heading}度",       # 飞行员回应
    "航向修正为{heading}度，已完成",     # 飞行员回应
    "收到指令，正在飞行至{altitude}英尺",  # 飞行员回应
    "航向{heading}度，飞行过程中",       # 飞行员回应
    "已爬升至{altitude}英尺，保持航向",  # 飞行员回应
    "航向{heading}度，正在执行航向修正",  # 飞行员回应
    "已爬升至{altitude}英尺，准备着陆",  # 飞行员回应
    "已飞行至{altitude}英尺，正在进入航道"  # 飞行员回应
]

# 随机选择模板并替换变量
def generate_dialog():
    tower_dialog = random.choice(tower_templates)
    pilot_dialog = random.choice(pilot_templates)

    # 填充动态变量
    tower_dialog_filled = tower_dialog.format(
        action=random.choice(["保持", "转弯", "爬升", "降落", "偏航"]),
        altitude=random.randint(1000, 30000),
        heading=random.randint(0, 360),
        angle=random.randint(10, 90),
        speed=random.randint(100, 500)
    )

    pilot_dialog_filled = pilot_dialog.format(
        action=random.choice(["转弯", "调整", "爬升", "降落"]),
        altitude=random.randint(1000, 30000),
        heading=random.randint(0, 360),
        angle=random.randint(10, 90),
        speed=random.randint(100, 500)
    )

    return [(tower_dialog_filled, "塔台"), (pilot_dialog_filled, "飞行员")]

# 生成多个对话并保存到 Excel
def save_to_excel(num=100000, filename="pilot_tower_dialogs.xlsx"):
    dialogues = []
    for _ in range(num):
        dialogues.extend(generate_dialog())
    
    # 转换为 DataFrame
    df = pd.DataFrame(dialogues, columns=["text", "label"])
    
    # 保存到 Excel 文件
    df.to_excel(filename, index=False)

# 调用函数生成并保存对话到 Excel
save_to_excel(10000)
